package com.hopu.haogoumall.db.service.imple;

import com.hopu.haogoumall.core.aliyunoss.AliyunOSSUtils;
import com.hopu.haogoumall.db.mapper.HaogoumallUserMapper;
import com.hopu.haogoumall.db.module.HaogoumallUser;
import com.hopu.haogoumall.db.service.VxLoginService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.InputStream;

/**
 * @Package: com.hopu.haogoumall.db.service
 * @ClassName: VxLoginServiceImple
 * @Author: xiaoBao
 * @CreateTime: 2020-11-18 14:51
 * @Description: 用户登录功能业务层接口实现类
 */

@Service /** 定义业务层*/
public class VxLoginServiceImple implements VxLoginService {
    /** 通过工厂获取Logger日志对象用于输出日志信息*/
    Logger logger = LoggerFactory.getLogger(getClass());

    /** 引入UserMapper持久层*/
    @Resource
    private HaogoumallUserMapper userMapper;

    /** 实例化阿里云OSS对象存储工具类 上传文件*/
    @Resource
    private AliyunOSSUtils ossUtils;


    /**
     * checkUserByUserName【验证用户名是否存在】：在判断账号密码是否正确前判断用户是否存在
     * @param user 用户名;
     * @return 将验证结果返回给表现层。
     */
    @Override
    public HaogoumallUser checkUserByUserName(HaogoumallUser user) {
        return userMapper.checkUserByUserName(user);
    }


    /**
     * 【checkUserByUserNameAndPassword】 根据用户名和密码验证用户是否存在
     * @param user  用户名和密码。
     */
    @Override
    public HaogoumallUser checkUserByUserNameAndPassword(HaogoumallUser user) {
        /**调用持久层操作：根据用户名和密码查询用户是否存在*/
        HaogoumallUser mallUser = userMapper.checkUserByUserNameAndPassword(user);
        //如果结果不为空，则表示登录成功
        if (mallUser != null){
            logger.info("登录成功");
            //将对象返回给表现层
            return mallUser;
        }else {
            //如果为空，则表示登录失败
            logger.info("用户名或密码错误");
            return mallUser;
        }
    }


    /**
     * 【updateUserLastLoginTime】 更新用户的最后一次登录时间和Ip地址
     * @param user 用户名和、前系统时间、IP地址；
     * @return 将执行结果返回给表现层进行逻辑判断。
     */
    @Override
    public int updateUserLastLoginTimeAndUserLastLoginIp(HaogoumallUser user) {
        return userMapper.updateUserLastLoginTimeAndUserLastLoginIp(user);
    }


    /**
     * 【addUser】 添加一条用户信息
     * @param user 用户名、密码、昵称、电话号码、性别；
     * @return 将执行结果返回给表现层。
     */
    @Override
    public int addUser(HaogoumallUser user, String objectName, InputStream inputStream) {
        /** 首先将用户头像文件上传至阿里云OSS对象存储服务器，并返回一个String(文件URL)用于存储到数据库中*/
        String url = ossUtils.uploadFile(objectName, inputStream);
        /** 将返回的url设置到user对象属性中*/
        user.setUserAvatar(url);
        /** 执行持久层操作：添加一条用户信息*/
        return userMapper.addUser(user);
    }


    /**
     * 【checkMobile】 验证手机号码是否存在
     * @param user 手机号码；
     * @return 将执行结果返回给表现层。
     */
    @Override
    public HaogoumallUser checkMobile(HaogoumallUser user) {
        return userMapper.checkMobile(user);
    }

}
